public class MyCircularQueueDemo {//数组实现环形队列
    private int[] elem;
    private int front;//队头
    private int rear;//队尾

    public MyCircularQueueDemo(int k){
        elem=new int[k];
    }

    /*
     * 入队
     * 1、判断是不是满的？
     * 2、把当前需要存放的元素放到rear下标的地方。
     */

    public boolean enQueue(int value){//插入
        if(isFull()) {
            return false;
        }
        this.elem[rear]=value;
        rear=(rear+1)%elem.length;
        return true;
    }

    //出队

    public boolean deQueue() {
        if(isEmpty()) {
            return false;
        }
        front = (front+1) % elem.length;
        return true;
    }

    //获取队尾元素

    public int Rear(){
        if(isEmpty()) {
            return -1;
        }
        return rear==0? this.elem[elem.length-1]:this.elem[rear-1];
    }

    //获取队头元素

    public int Front() {
        if(isEmpty()) {
            return -1;
        }
        return elem[front];
    }

    public boolean isFull(){
        if((rear+1)%elem.length==front){
            return true;
        }
        return false;
    }

    public boolean isEmpty() {
        return rear == front;
    }
}
